<?php
require_once('includes/clases/Horario.php');
require_once('includes/clases/Grupo.php');
require_once('includes/clases/ConstantesCargaAcademica.php');
require_once('includes/clases/Logger.php');
require_once('includes/clases/AccesoDatosCargaGlobales.php');
require_once('includes/clases/AccesoDatosCargaAcademica.php');
require_once('includes/clases/ManejoArchivoCargaAcademica.php');
require_once('includes/clases/ManejoArchivoCargaGlobales.php');
require_once('includes/clases/HorarioProfesor.php');

class ProcesoCargaGlobales{
	private $logger = null;
    private $accesoDatos = null;
    private $manejoArchivo = null;

	function __construct() {
		$this->logger = new Logger();
        $this->accesoDatos = new AccesoDatosCargaGlobales( $this->logger );
        $this->accesoDatosAcademica = new AccesoDatosCargaAcademica( $this->logger );
        $this->manejoArchivo = new ManejoArchivoCargaGlobales( $this->accesoDatosAcademica, $this->logger );
	}

    function existeInformacionDeGlobalesDelTrimestre( $idTrimestre ){
        $numRegistros = $this->accesoDatos->db_obtener_id_grupo_horariosglobales_by_trimestre( $idTrimestre );
        return ( $numRegistros != 0 );
    }

	function procesar( $idTrimestre, $archivos ){
        $this->logger->apagar();

        $rutaArchivoAProcesar = $this->manejoArchivo->guardar( $archivos );        

        $this->logger->log( "Ruta archivo a procesar: " . $rutaArchivoAProcesar );

        if( !is_null( $rutaArchivoAProcesar ) ){            

            $objPHPExcel = $this->manejoArchivo->leerArchivo( $rutaArchivoAProcesar );

            if( !( $objPHPExcel == null ) ){
                $this->crearObjetosHorarios( $objPHPExcel, $idTrimestre );
            }

        }else{
            $this->logger->log( "Error al guardar el archivo", Logger::$ERROR );
        }

        return $this->logger->logError;
    }

    function crearObjetosHorarios( $objPHPExcel, $idTrimestre ){
        if( $objPHPExcel == null || is_null($objPHPExcel) || $idTrimestre == null ){
            $this->logger->log( "Error al crear horarios y grupos.", Logger::$ERROR );
            return;
        }

        $iteradorFila = 2;
        $fila = null;
        $horarios = null;       

        if( $this->existeInformacionDeGlobalesDelTrimestre( $idTrimestre ) ){
            $this->logger->log( "Ya existe informacion del trimestre, se sobreescribira.", Logger::$ERROR );
        }

        $horario = null;
        $grupo = null;
        while( $this->manejoArchivo->validaExisteSiguienteFila( $objPHPExcel, $iteradorFila ) ){
            $grupo = $this->manejoArchivo->parsearGrupo( $objPHPExcel, $iteradorFila, $idTrimestre );
            if( $grupo == null ){
            	$iteradorFila++;
            	continue;
            }
            $grupo->id = $this->accesoDatosAcademica->db_obtener_grupo( $grupo );
            $this->logger->log( $grupo->display(), Logger::$INFO );
            $horarios = $this->manejoArchivo->parsearHorarios( $objPHPExcel, $iteradorFila, $grupo );
            if( $horarios != null ){
            	$this->logger->log( "borrarHorariosDelGrupo: " . $this->accesoDatos->borrarHorariosDelGrupo( $grupo ), Logger::$INFO );
            	$this->accesoDatos->guardarHorarios( $horarios );
            }
            $iteradorFila++;
        }
    }

    function resultado( $resultado ){
        $this->logger->log( $resultado, Logger::$ERROR );
    }
}
?>